package com.guoxue.action.common;

import java.util.ArrayList;
import java.util.List;

import javax.annotation.Resource;

import org.springframework.stereotype.Component;

import com.guoxue.domain.InventoryVo;
import com.guoxue.domain.PropertyConfigVo;
import com.guoxue.domain.TotalInfoVo;
import com.guoxue.model.Inventory;
import com.guoxue.service.IPropertyConfigService;
/**
 * 模块化背包，主要包括：
 * 1.getKnapsackInfo拆分当前商品在背包中的栏位列表
 * 2.getKnapsackFiled计算当前商品需要多少个栏位
 * @author kanghongbo
 *
 */
@Component
public class ModularKnapsack {
	@Resource
	private IPropertyConfigService propertyConfigService;
	/**
	 * 拆分当前商品在背包中所占的栏位列表
	 * @param vo 商品信息
	 * @return
	 */
	public List<Inventory> getKnapsackInfo(InventoryVo vo){
		int count=vo.getProCount();
		List<Inventory> inventoryList = new ArrayList<>();
		PropertyConfigVo propertyConfig = propertyConfigService.getPropertyConfigById(vo.getGoodsId());
		if(propertyConfig.getIsOverlay()!=1&&vo.getProCount()>1){//不允许叠加且数量>1
			for(int i=0;i<vo.getProCount();i++){//拆分商品所占背包栏位
				vo.setProCount(1);
				Inventory inventory = new Inventory(vo,propertyConfig);
				inventoryList.add(inventory);
			}	
		}else if(propertyConfig.getIsOverlay()==1&&vo.getProCount()>propertyConfig.getOverlayCount()){//允许叠加且数量大于最大叠加数				
			for(int i=0;i<vo.getProCount();i++){//拆分商品所占背包栏位
				int j=vo.getProCount()-1;
				if(i==j){
					int ownCount=count%propertyConfig.getOverlayCount();
					vo.setProCount(ownCount);
				}else{
					vo.setProCount(propertyConfig.getOverlayCount());
				}
				Inventory inventory = new Inventory(vo,propertyConfig);
				inventoryList.add(inventory);
			}	
		}else{//始终只占背包的一个栏位的数据
			Inventory inventory = new Inventory(vo,propertyConfig);
			inventoryList.add(inventory);
		}
		
		return inventoryList;
	}
	/**
	 * 计算当前商品在背包中所占多少个栏位
	 * @param vo
	 * @return usedFiled
	 */
	public int getKnapsackFiled(InventoryVo vo){
		PropertyConfigVo propertyConfigVo  = propertyConfigService.getPropertyConfigById(vo.getGoodsId());//查询当前商品属性
		Integer IsOverlay = propertyConfigVo.getIsOverlay();//当前道具是否可以叠加
		int myPropCount=0;//当前拥有该道具的数量
		int usedFiled=0;//当前商品使用多少栏位
		if(myPropCount==0){
			return usedFiled;
		}
		if(IsOverlay!=1){
			usedFiled =vo.getProCount();
			return usedFiled;
		}
		if(IsOverlay==1){
			myPropCount=vo.getProCount();
			int i=propertyConfigVo.getOverlayCount();//道具可以叠加次数
			int j=myPropCount%i;//当前栏位还剩多少叠加次数
			int k=myPropCount/i;
			if(j!=0){
				usedFiled=k+1;
			}else{
				usedFiled=k;
			}	
		}
		return usedFiled;
	}
	/**
	 * 计算购买当前商品需要多少个背包栏位
	 * @param vo
	 * @return needFiled
	 */
	public int getBuyFiled(InventoryVo vo,int count){
		PropertyConfigVo propertyConfigVo  = propertyConfigService.getPropertyConfigById(vo.getGoodsId());//查询当前商品属性
		Integer IsOverlay = propertyConfigVo.getIsOverlay();//当前道具是否可以叠加
		int myPropCount=0;//当前拥有该道具的数量
		int needFiled=0;//定义当前购买需要背包的栏位数(默认都是需要一个栏位的，但是拥有该道具了就不需要栏位)
		myPropCount=vo.getProCount();
		
		if(IsOverlay!=1){
			needFiled=count;
		}
		if(IsOverlay==1){
			int i=propertyConfigVo.getOverlayCount();//道具可以叠加次数
			int j=myPropCount%i;//当前栏位还剩多少叠加次数
			int f=count+j;//购买完成后总共需要叠加的次数
			int g=f%i;//购买完成后叠加是否有余数
			int h=f/i;//购买完成后已知需要的背包栏位数
			if(g!=0){
				needFiled=h+1;
			}else{
				needFiled=h;
			}	
		}
		return needFiled;
	}
}
